package schuchert.agent;

import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.fail;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.Reader;

import org.junit.Test;

public class ManifestTest {
    @Test
    public void manifestHasCorrectClassName() throws Exception {
        FileReader reader = null;
        BufferedReader bufferedReader = null;

        try {
            reader = retrieveThisProjectsManifest();
            bufferedReader = new BufferedReader(reader);

            String line = null;
            String expected = String.format("Premain-Class: %s", ConfigurableClassFileTransformerRegistrar.class
                    .getName());
            while ((line = bufferedReader.readLine()) != null) {
                if (line.equals(expected))
                    return;
            }
            fail(String.format("Did not find line matching: '%s' -- was class renamed?", expected));
        } finally {
            closeIfNotNull(bufferedReader);
            closeIfNotNull(reader);
        }
    }

    private boolean foundPremainClassLineWithCorrectClassName(BufferedReader bufferedReader) throws Exception {
        String line = null;
        String expected = String.format("Premain-Class: %s", ConfigurableClassFileTransformerRegistrar.class.getName());
        while ((line = bufferedReader.readLine()) != null) {
            if (line.equals(expected))
                return true;
        }

        return false;
    }

    private FileReader retrieveThisProjectsManifest() throws FileNotFoundException {
        FileReader reader = new FileReader("META-INF/MANIFEST.MF");
        assertNotNull(reader);
        return reader;
    }

    private void closeIfNotNull(Reader reader) throws Exception {
        if (reader != null)
            reader.close();
    }
}
